(function webpackUniversalModuleDefinition(root, factory) {
  if (typeof exports === 'object' && typeof module === 'object') {
    module.exports = factory(require('vue'))
  } else if (typeof define === 'function' && define.amd) {
    define([], factory)
  } else if (typeof exports === 'object') {
    exports['contextmenu'] = factory(require('vue'))
  } else {
    root['contextmenu'] = factory(root['Vue'])
  }
})((typeof self !== 'undefined' ? self : this), (__WEBPACK_EXTERNAL_MODULE__203__) => {
  return /******/ (() => { // webpackBootstrap
    /******/
    var __webpack_modules__ = ({

      /***/ 665: /***/ ((module, __webpack_exports__, __webpack_require__) => {

        'use strict'
        __webpack_require__.r(__webpack_exports__)
        /* harmony export */
        __webpack_require__.d(__webpack_exports__, {
          /* harmony export */   'default': () => (__WEBPACK_DEFAULT_EXPORT__)
          /* harmony export */
        })
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81)
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__)
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645)
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)
// Imports

        var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()))
// Module
        ___CSS_LOADER_EXPORT___.push([module.id, '.menu[data-v-497d1621]{position:fixed;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);background:#fff;border-radius:4px;padding:8px 0}.menu_body[data-v-497d1621]{display:block}.menu_item[data-v-497d1621]{list-style:none;line-height:32px;padding:0 16px;margin:0;font-size:13px;outline:0;display:flex;align-items:center;transition:.2s;border-bottom:1px solid #00000000}.menu_item__divided[data-v-497d1621]{border-bottom-color:#ebeef5}.menu_item .menu_item_icon[data-v-497d1621]{margin-right:8px;width:13px}.menu_item .menu_item_label[data-v-497d1621]{flex:1}.menu_item .menu_item_expand_icon[data-v-497d1621]{margin-left:16px;font-size:6px;width:10px}.menu_item__available[data-v-497d1621]{color:#606266;cursor:pointer}.menu_item__available[data-v-497d1621]:hover{background:#ecf5ff;color:#409eff}.menu_item__disabled[data-v-497d1621]{color:#c0c4cc;cursor:not-allowed}.menu_item_expand[data-v-497d1621]{background:#ecf5ff;color:#409eff}', ''])
// Exports
        /* harmony default export */
        const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___)

        /***/
      }),

      /***/ 727: /***/ ((module, __webpack_exports__, __webpack_require__) => {

        'use strict'
        __webpack_require__.r(__webpack_exports__)
        /* harmony export */
        __webpack_require__.d(__webpack_exports__, {
          /* harmony export */   'default': () => (__WEBPACK_DEFAULT_EXPORT__)
          /* harmony export */
        })
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81)
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__)
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645)
        /* harmony import */
        var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)
// Imports

        var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()))
// Module
        ___CSS_LOADER_EXPORT___.push([module.id, '.contextmenu-submenu-fade-enter-active,.contextmenu-submenu-fade-leave-active{transition:opacity .1s}.contextmenu-submenu-fade-enter,.contextmenu-submenu-fade-leave-to{opacity:0}', ''])
// Exports
        /* harmony default export */
        const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___)

        /***/
      }),

      /***/ 645: /***/ ((module) => {

        'use strict'

        /*
          MIT License http://www.opensource.org/licenses/mit-license.php
          Author Tobias Koppers @sokra
        */
        module.exports = function(cssWithMappingToString) {
          var list = [] // return the list of modules as css string

          list.toString = function toString() {
            return this.map(function(item) {
              var content = ''
              var needLayer = typeof item[5] !== 'undefined'

              if (item[4]) {
                content += '@supports ('.concat(item[4], ') {')
              }

              if (item[2]) {
                content += '@media '.concat(item[2], ' {')
              }

              if (needLayer) {
                content += '@layer'.concat(item[5].length > 0 ? ' '.concat(item[5]) : '', ' {')
              }

              content += cssWithMappingToString(item)

              if (needLayer) {
                content += '}'
              }

              if (item[2]) {
                content += '}'
              }

              if (item[4]) {
                content += '}'
              }

              return content
            }).join('')
          } // import a list of modules into the list

          list.i = function i(modules, media, dedupe, supports, layer) {
            if (typeof modules === 'string') {
              modules = [[null, modules, undefined]]
            }

            var alreadyImportedModules = {}

            if (dedupe) {
              for (var k = 0; k < this.length; k++) {
                var id = this[k][0]

                if (id != null) {
                  alreadyImportedModules[id] = true
                }
              }
            }

            for (var _k = 0; _k < modules.length; _k++) {
              var item = [].concat(modules[_k])

              if (dedupe && alreadyImportedModules[item[0]]) {
                continue
              }

              if (typeof layer !== 'undefined') {
                if (typeof item[5] === 'undefined') {
                  item[5] = layer
                } else {
                  item[1] = '@layer'.concat(item[5].length > 0 ? ' '.concat(item[5]) : '', ' {').concat(item[1], '}')
                  item[5] = layer
                }
              }

              if (media) {
                if (!item[2]) {
                  item[2] = media
                } else {
                  item[1] = '@media '.concat(item[2], ' {').concat(item[1], '}')
                  item[2] = media
                }
              }

              if (supports) {
                if (!item[4]) {
                  item[4] = ''.concat(supports)
                } else {
                  item[1] = '@supports ('.concat(item[4], ') {').concat(item[1], '}')
                  item[4] = supports
                }
              }

              list.push(item)
            }
          }

          return list
        }

        /***/
      }),

      /***/ 81: /***/ ((module) => {

        'use strict'

        module.exports = function(i) {
          return i[1]
        }

        /***/
      }),

      /***/ 169: /***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
        var content = __webpack_require__(665)
        if (content.__esModule) content = content.default
        if (typeof content === 'string') content = [[module.id, content, '']]
        if (content.locals) module.exports = content.locals
// add the styles to the DOM
        var add = (__webpack_require__(402)/* ["default"] */.Z)
        var update = add('8cc2127a', content, true, { 'sourceMap': false, 'shadowMode': false })

        /***/
      }),

      /***/ 291: /***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
        var content = __webpack_require__(727)
        if (content.__esModule) content = content.default
        if (typeof content === 'string') content = [[module.id, content, '']]
        if (content.locals) module.exports = content.locals
// add the styles to the DOM
        var add = (__webpack_require__(402)/* ["default"] */.Z)
        var update = add('23d3fe8e', content, true, { 'sourceMap': false, 'shadowMode': false })

        /***/
      }),

      /***/ 402: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

        'use strict'

// EXPORTS
        __webpack_require__.d(__webpack_exports__, {
          'Z': () => (/* binding */ addStylesClient)
        })

        // CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/listToStyles.js
        /**
         * Translates the list format produced by css-loader into something
         * easier to manipulate.
         */
        function listToStyles(parentId, list) {
          var styles = []
          var newStyles = {}
          for (var i = 0; i < list.length; i++) {
            var item = list[i]
            var id = item[0]
            var css = item[1]
            var media = item[2]
            var sourceMap = item[3]
            var part = {
              id: parentId + ':' + i, css: css, media: media, sourceMap: sourceMap
            }
            if (!newStyles[id]) {
              styles.push(newStyles[id] = { id: id, parts: [part] })
            } else {
              newStyles[id].parts.push(part)
            }
          }
          return styles
        }

        // CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/addStylesClient.js
        /*
          MIT License http://www.opensource.org/licenses/mit-license.php
          Author Tobias Koppers @sokra
          Modified by Evan You @yyx990803
        */

        var hasDocument = typeof document !== 'undefined'

        if (typeof DEBUG !== 'undefined' && DEBUG) {
          if (!hasDocument) {
            throw new Error('vue-style-loader cannot be used in a non-browser environment. ' + 'Use { target: \'node\' } in your Webpack config to indicate a server-rendering environment.')
          }
        }

        /*
        type StyleObject = {
          id: number;
          parts: Array<StyleObjectPart>
        }

        type StyleObjectPart = {
          css: string;
          media: string;
          sourceMap: ?string
        }
        */

        var stylesInDom = {/*
  [id: number]: {
    id: number,
    refs: number,
    parts: Array<(obj?: StyleObjectPart) => void>
  }
*/
        }

        var head = hasDocument && (document.head || document.getElementsByTagName('head')[0])
        var singletonElement = null
        var singletonCounter = 0
        var isProduction = false
        var noop = function() {
        }
        var options = null
        var ssrIdKey = 'data-vue-ssr-id'

// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
// tags it will allow on a page
        var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\b/.test(navigator.userAgent.toLowerCase())

        function addStylesClient(parentId, list, _isProduction, _options) {
          isProduction = _isProduction

          options = _options || {}

          var styles = listToStyles(parentId, list)
          addStylesToDom(styles)

          return function update(newList) {
            var mayRemove = []
            for (var i = 0; i < styles.length; i++) {
              var item = styles[i]
              var domStyle = stylesInDom[item.id]
              domStyle.refs--
              mayRemove.push(domStyle)
            }
            if (newList) {
              styles = listToStyles(parentId, newList)
              addStylesToDom(styles)
            } else {
              styles = []
            }
            for (var i = 0; i < mayRemove.length; i++) {
              var domStyle = mayRemove[i]
              if (domStyle.refs === 0) {
                for (var j = 0; j < domStyle.parts.length; j++) {
                  domStyle.parts[j]()
                }
                delete stylesInDom[domStyle.id]
              }
            }
          }
        }

        function addStylesToDom(styles /* Array<StyleObject> */) {
          for (var i = 0; i < styles.length; i++) {
            var item = styles[i]
            var domStyle = stylesInDom[item.id]
            if (domStyle) {
              domStyle.refs++
              for (var j = 0; j < domStyle.parts.length; j++) {
                domStyle.parts[j](item.parts[j])
              }
              for (; j < item.parts.length; j++) {
                domStyle.parts.push(addStyle(item.parts[j]))
              }
              if (domStyle.parts.length > item.parts.length) {
                domStyle.parts.length = item.parts.length
              }
            } else {
              var parts = []
              for (var j = 0; j < item.parts.length; j++) {
                parts.push(addStyle(item.parts[j]))
              }
              stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }
            }
          }
        }

        function createStyleElement() {
          var styleElement = document.createElement('style')
          styleElement.type = 'text/css'
          head.appendChild(styleElement)
          return styleElement
        }

        function addStyle(obj /* StyleObjectPart */) {
          var update, remove
          var styleElement = document.querySelector('style[' + ssrIdKey + '~="' + obj.id + '"]')

          if (styleElement) {
            if (isProduction) {
              // has SSR styles and in production mode.
              // simply do nothing.
              return noop
            } else {
              // has SSR styles but in dev mode.
              // for some reason Chrome can't handle source map in server-rendered
              // style tags - source maps in <style> only works if the style tag is
              // created and inserted dynamically. So we remove the server rendered
              // styles and inject new ones.
              styleElement.parentNode.removeChild(styleElement)
            }
          }

          if (isOldIE) {
            // use singleton mode for IE9.
            var styleIndex = singletonCounter++
            styleElement = singletonElement || (singletonElement = createStyleElement())
            update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)
            remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)
          } else {
            // use multi-style-tag mode in all other cases
            styleElement = createStyleElement()
            update = applyToTag.bind(null, styleElement)
            remove = function() {
              styleElement.parentNode.removeChild(styleElement)
            }
          }

          update(obj)

          return function updateStyle(newObj /* StyleObjectPart */) {
            if (newObj) {
              if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
                return
              }
              update(obj = newObj)
            } else {
              remove()
            }
          }
        }

        var replaceText = (function() {
          var textStore = []

          return function(index, replacement) {
            textStore[index] = replacement
            return textStore.filter(Boolean).join('\n')
          }
        })()

        function applyToSingletonTag(styleElement, index, remove, obj) {
          var css = remove ? '' : obj.css

          if (styleElement.styleSheet) {
            styleElement.styleSheet.cssText = replaceText(index, css)
          } else {
            var cssNode = document.createTextNode(css)
            var childNodes = styleElement.childNodes
            if (childNodes[index]) styleElement.removeChild(childNodes[index])
            if (childNodes.length) {
              styleElement.insertBefore(cssNode, childNodes[index])
            } else {
              styleElement.appendChild(cssNode)
            }
          }
        }

        function applyToTag(styleElement, obj) {
          var css = obj.css
          var media = obj.media
          var sourceMap = obj.sourceMap

          if (media) {
            styleElement.setAttribute('media', media)
          }
          if (options.ssrId) {
            styleElement.setAttribute(ssrIdKey, obj.id)
          }

          if (sourceMap) {
            // https://developer.chrome.com/devtools/docs/javascript-debugging
            // this makes source maps inside style tags work properly in Chrome
            css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */'
            // http://stackoverflow.com/a/26603875
            css += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'
          }

          if (styleElement.styleSheet) {
            styleElement.styleSheet.cssText = css
          } else {
            while (styleElement.firstChild) {
              styleElement.removeChild(styleElement.firstChild)
            }
            styleElement.appendChild(document.createTextNode(css))
          }
        }

        /***/
      }),

      /***/ 203: /***/ ((module) => {

        'use strict'
        module.exports = __WEBPACK_EXTERNAL_MODULE__203__

        /***/
      })

      /******/
    })
    /************************************************************************/
    /******/ 	// The module cache
    /******/
    var __webpack_module_cache__ = {}
    /******/
    /******/ 	// The require function
    /******/
    function __webpack_require__(moduleId) {
      /******/ 		// Check if module is in cache
      /******/
      var cachedModule = __webpack_module_cache__[moduleId]
      /******/
      if (cachedModule !== undefined) {
        /******/
        return cachedModule.exports
        /******/
      }
      /******/ 		// Create a new module (and put it into the cache)
      /******/
      var module = __webpack_module_cache__[moduleId] = {
        /******/      id: moduleId, /******/ 			// no module.loaded needed
        /******/      exports: {}
        /******/
      }
      /******/
      /******/ 		// Execute the module function
      /******/
      __webpack_modules__[moduleId](module, module.exports, __webpack_require__)
      /******/
      /******/ 		// Return the exports of the module
      /******/
      return module.exports
      /******/
    }

    /******/
    /************************************************************************/
    /******/ 	/* webpack/runtime/compat get default export */
    /******/
    (() => {
      /******/ 		// getDefaultExport function for compatibility with non-harmony modules
      /******/
      __webpack_require__.n = (module) => {
        /******/
        var getter = module && module.__esModule ? /******/        () => (module['default']) : /******/        () => (module)
        /******/
        __webpack_require__.d(getter, { a: getter })
        /******/
        return getter
        /******/
      }
      /******/
    })();
    /******/
    /******/ 	/* webpack/runtime/define property getters */
    /******/
    (() => {
      /******/ 		// define getter functions for harmony exports
      /******/
      __webpack_require__.d = (exports, definition) => {
        /******/
        for (var key in definition) {
          /******/
          if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
            /******/
            Object.defineProperty(exports, key, { enumerable: true, get: definition[key] })
            /******/
          }
          /******/
        }
        /******/
      }
      /******/
    })();
    /******/
    /******/ 	/* webpack/runtime/hasOwnProperty shorthand */
    /******/
    (() => {
      /******/
      __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
      /******/
    })();
    /******/
    /******/ 	/* webpack/runtime/make namespace object */
    /******/
    (() => {
      /******/ 		// define __esModule on exports
      /******/
      __webpack_require__.r = (exports) => {
        /******/
        if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
          /******/
          Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
          /******/
        }
        /******/
        Object.defineProperty(exports, '__esModule', { value: true })
        /******/
      }
      /******/
    })();
    /******/
    /******/ 	/* webpack/runtime/publicPath */
    /******/
    (() => {
      /******/
      __webpack_require__.p = ''
      /******/
    })()
    /******/
    /************************************************************************/
    var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
    (() => {
      'use strict'
// ESM COMPAT FLAG
      __webpack_require__.r(__webpack_exports__)

// EXPORTS
      __webpack_require__.d(__webpack_exports__, {
        'default': () => (/* binding */ entry_lib)
      })

      // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
      /* eslint-disable no-var */
// This file is imported into lib/wc client bundles.

      if (typeof window !== 'undefined') {
        var currentScript = window.document.currentScript
        if (false) {
          var getCurrentScript
        }

        var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)
        if (src) {
          __webpack_require__.p = src[1] // eslint-disable-line
        }
      }

// Indicate to webpack that this file can be concatenated
      /* harmony default export */
      const setPublicPath = (null)

// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
      var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(203)
      var external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_)
      // CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Submenu.vue?vue&type=template&id=497d1621&scoped=true&
      var render = function render() {
        var _vm = this, _c = _vm._self._c
        return _c('transition', { attrs: { 'name': 'contextmenu-submenu-fade' } }, [(_vm.visible) ? _c('div', {
          ref: 'menu', class: [_vm.CLASS_MENU, 'menu', _vm.customClass], style: ({
            left: _vm.style.left + 'px',
            top: _vm.style.top + 'px',
            minWidth: _vm.style.minWidth + 'px',
            zIndex: _vm.style.zIndex
          }), on: { 'contextmenu': (e) => e.preventDefault() }
        }, [_c('div', { staticClass: 'menu_body' }, [_vm._l((_vm.items), function(item, index) {
          return [(!item.hidden) ? [(item.disabled) ? _c('div', {
            key: index + '_disabled',
            class: [_vm.CLASS_MENU_ITEM, _vm.CLASS_MENU_ITEM_UNCLICKABLE, 'menu_item', 'menu_item__disabled', item.divided ? 'menu_item__divided' : null]
          }, [(_vm.hasIcon) ? _c('div', { staticClass: 'menu_item_icon' }, [(item.icon) ? _c('i', { class: item.icon }) : _vm._e()]) : _vm._e(), _c('span', { staticClass: 'menu_item_label' }, [_vm._v(_vm._s(item.label))]), _c('div', { staticClass: 'menu_item_expand_icon' })]) : (item.children) ? _c('div', {
            key: index + '_children',
            class: [_vm.CLASS_MENU_ITEM, _vm.CLASS_MENU_ITEM_UNCLICKABLE, 'menu_item', 'menu_item__available', _vm.activeSubmenu.index === index ? 'menu_item_expand' : null, item.divided ? 'menu_item__divided' : null],
            on: { 'mouseenter': ($event) => _vm.enterItem($event, item, index) }
          }, [(_vm.hasIcon) ? _c('div', { staticClass: 'menu_item_icon' }, [(item.icon) ? _c('i', { class: item.icon }) : _vm._e()]) : _vm._e(), _c('span', { staticClass: 'menu_item_label' }, [_vm._v(_vm._s(item.label))]), _c('div', { staticClass: 'menu_item_expand_icon' }, [_vm._v('▶')])]) : _c('div', {
            key: index,
            class: [_vm.CLASS_MENU_ITEM, _vm.CLASS_MENU_ITEM_CLICKABLE, 'menu_item', 'menu_item__available', item.divided ? 'menu_item__divided' : null],
            on: {
              'mouseenter': ($event) => _vm.enterItem($event, item, index), 'click': function($event) {
                return _vm.itemClick(item)
              }
            }
          }, [(_vm.hasIcon) ? _c('div', { staticClass: 'menu_item_icon' }, [(item.icon) ? _c('i', { class: item.icon }) : _vm._e()]) : _vm._e(), _c('span', { staticClass: 'menu_item_label' }, [_vm._v(_vm._s(item.label))]), _c('div', { staticClass: 'menu_item_expand_icon' })])] : _vm._e()]
        })], 2)]) : _vm._e()])
      }
      var staticRenderFns = []

      // CONCATENATED MODULE: ./src/constant.js
      const SUBMENU_X_OFFSET = 3
      const SUBMENU_Y_OFFSET = -8
      const SUBMENU_OPEN_TREND_LEFT = 'left'
      const SUBMENU_OPEN_TREND_RIGHT = 'right'
      const COMPONENT_NAME = 'contextmenu-submenu'
      const CLASS_MENU = 'contextmenu_menu'
      const CLASS_MENU_ITEM = 'contextmenu_menu_item'
      const CLASS_MENU_ITEM_CLICKABLE = 'contextmenu_menu_item_clickable'
      const CLASS_MENU_ITEM_UNCLICKABLE = 'contextmenu_menu_item_unclickable'
      // CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Submenu.vue?vue&type=script&lang=js&

      /* harmony default export */
      const Submenuvue_type_script_lang_js_ = ({
        name: COMPONENT_NAME, data() {
          return {
            CLASS_MENU: CLASS_MENU,
            CLASS_MENU_ITEM: CLASS_MENU_ITEM,
            CLASS_MENU_ITEM_CLICKABLE: CLASS_MENU_ITEM_CLICKABLE,
            CLASS_MENU_ITEM_UNCLICKABLE: CLASS_MENU_ITEM_UNCLICKABLE,
            activeSubmenu: {
              index: null, instance: null
            },
            items: [],
            position: {
              x: 0, y: 0, width: 0, height: 0
            },
            style: {
              left: 0, top: 0, zIndex: 2, minWidth: 150
            },
            customClass: null,
            visible: false,
            hasIcon: false,
            openTrend: SUBMENU_OPEN_TREND_RIGHT
          }
        }, mounted() {
          this.visible = true
          for (let item of this.items) {
            if (item.icon) {
              this.hasIcon = true
              break
            }
          }
          this.$nextTick(() => {
            const windowWidth = document.documentElement.clientWidth
            const windowHeight = document.documentElement.clientHeight
            const menu = this.$refs.menu
            const menuWidth = menu.offsetWidth
            const menuHeight = menu.offsetHeight;

            (this.openTrend === SUBMENU_OPEN_TREND_LEFT ? this.leftOpen : this.rightOpen)(windowWidth, windowHeight, menuWidth)

            this.style.top = this.position.y
            if (this.position.y + menuHeight > windowHeight) {
              if (this.position.height === 0) {
                this.style.top = this.position.y / windowHeight > 0.5 ? (this.position.y - menuHeight) : this.position.y
              } else {
                this.style.top = windowHeight - menuHeight
              }
            }
          })
        }, methods: {
          leftOpen(windowWidth, windowHeight, menuWidth) {
            this.style.left = this.position.x - menuWidth
            this.openTrend = SUBMENU_OPEN_TREND_LEFT
            if (this.style.left < 0) {
              this.openTrend = SUBMENU_OPEN_TREND_RIGHT
              if (this.position.width === 0) {
                this.style.left = 0
              } else {
                this.style.left = this.position.x + this.position.width
              }
            }
          }, rightOpen(windowWidth, windowHeight, menuWidth) {
            this.style.left = this.position.x + this.position.width
            this.openTrend = SUBMENU_OPEN_TREND_RIGHT
            if (this.style.left + menuWidth > windowWidth) {
              this.openTrend = SUBMENU_OPEN_TREND_LEFT
              if (this.position.width === 0) {
                this.style.left = windowWidth - menuWidth
              } else {
                this.style.left = this.position.x - menuWidth
              }
            }
          }, enterItem(e, item, index) {
            if (!this.visible) {
              return
            }
            if (this.activeSubmenu.instance) {
              if (this.activeSubmenu.index === index) {
                return
              } else {
                this.activeSubmenu.instance.close()
                this.activeSubmenu.instance = null
                this.activeSubmenu.index = null
              }
            }
            if (!item.children) {
              return
            }
            const menuItemClientRect = e.target.getBoundingClientRect()
            const SubmenuConstructor = external_commonjs_vue_commonjs2_vue_root_Vue_default().component(COMPONENT_NAME)
            this.activeSubmenu.index = index
            this.activeSubmenu.instance = new SubmenuConstructor()
            this.activeSubmenu.instance.items = item.children
            this.activeSubmenu.instance.openTrend = this.openTrend
            this.activeSubmenu.instance.position = {
              x: menuItemClientRect.x + SUBMENU_X_OFFSET,
              y: menuItemClientRect.y + SUBMENU_Y_OFFSET,
              width: menuItemClientRect.width - 2 * SUBMENU_X_OFFSET,
              height: menuItemClientRect.height - 2 * SUBMENU_Y_OFFSET
            }
            this.activeSubmenu.instance.style.minWidth = typeof item.minWidth === 'number' ? item.minWidth : this.style.minWidth
            this.activeSubmenu.instance.style.zIndex = this.style.zIndex
            this.activeSubmenu.instance.customClass = typeof item.customClass === 'string' ? item.customClass : this.customClass
            this.activeSubmenu.instance.$mount()
            document.body.appendChild(this.activeSubmenu.instance.$el)
          }, itemClick(item) {
            if (!this.visible) {
              return
            }
            if (item && !item.disabled && !item.hidden && typeof item.onClick === 'function') {
              return item.onClick()
            }
          }, close() {
            this.visible = false
            if (this.activeSubmenu.instance) {
              this.activeSubmenu.instance.close()
            }
            this.$nextTick(() => {
              this.$destroy()
            })
          }
        }
      })

      // CONCATENATED MODULE: ./src/components/Submenu.vue?vue&type=script&lang=js&
      /* harmony default export */
      const components_Submenuvue_type_script_lang_js_ = (Submenuvue_type_script_lang_js_)
// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-52.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Submenu.vue?vue&type=style&index=0&id=497d1621&prod&scoped=true&lang=css&
      var Submenuvue_type_style_index_0_id_497d1621_prod_scoped_true_lang_css_ = __webpack_require__(169)
      // CONCATENATED MODULE: ./src/components/Submenu.vue?vue&type=style&index=0&id=497d1621&prod&scoped=true&lang=css&

// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-52.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Submenu.vue?vue&type=style&index=1&id=497d1621&prod&lang=css&
      var Submenuvue_type_style_index_1_id_497d1621_prod_lang_css_ = __webpack_require__(291)
      // CONCATENATED MODULE: ./src/components/Submenu.vue?vue&type=style&index=1&id=497d1621&prod&lang=css&

      // CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js
      /* globals __VUE_SSR_CONTEXT__ */

// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.

      function normalizeComponent(scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier /* server only */, shadowMode /* vue-cli only */) {
        // Vue.extend constructor export interop
        var options = typeof scriptExports === 'function' ? scriptExports.options : scriptExports

        // render functions
        if (render) {
          options.render = render
          options.staticRenderFns = staticRenderFns
          options._compiled = true
        }

        // functional template
        if (functionalTemplate) {
          options.functional = true
        }

        // scopedId
        if (scopeId) {
          options._scopeId = 'data-v-' + scopeId
        }

        var hook
        if (moduleIdentifier) {
          // server build
          hook = function(context) {
            // 2.3 injection
            context = context || // cached call
              (this.$vnode && this.$vnode.ssrContext) || // stateful
              (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
            // 2.2 with runInNewContext: true
            if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
              context = __VUE_SSR_CONTEXT__
            }
            // inject component styles
            if (injectStyles) {
              injectStyles.call(this, context)
            }
            // register component module identifier for async chunk inferrence
            if (context && context._registeredComponents) {
              context._registeredComponents.add(moduleIdentifier)
            }
          }
          // used by ssr in case component is cached and beforeCreate
          // never gets called
          options._ssrRegister = hook
        } else if (injectStyles) {
          hook = shadowMode ? function() {
            injectStyles.call(this, (options.functional ? this.parent : this).$root.$options.shadowRoot)
          } : injectStyles
        }

        if (hook) {
          if (options.functional) {
            // for template-only hot-reload because in that case the render fn doesn't
            // go through the normalizer
            options._injectStyles = hook
            // register for functional component in vue file
            var originalRender = options.render
            options.render = function renderWithStyleInjection(h, context) {
              hook.call(context)
              return originalRender(h, context)
            }
          } else {
            // inject component registration as beforeCreate hook
            var existing = options.beforeCreate
            options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
          }
        }

        return {
          exports: scriptExports, options: options
        }
      }

      // CONCATENATED MODULE: ./src/components/Submenu.vue

      /* normalize component */

      var component = normalizeComponent(components_Submenuvue_type_script_lang_js_, render, staticRenderFns, false, null, '497d1621', null)

      /* harmony default export */
      const Submenu = (component.exports)

      // CONCATENATED MODULE: ./src/util.js
      function hasClass(el, className) {
        if (!className) {
          return true
        }
        if (!el || !el.className || typeof el.className !== 'string') {
          return false
        }
        for (let cn of el.className.split(/\s+/)) {
          if (cn === className) {
            return true
          }
        }
        return false
      }

      function getElementsByClassName(className) {
        let els = []
        for (let el of document.getElementsByClassName(className) || []) {
          els.push(el)
        }
        return els
      }

      function uuid() {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
          var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8)
          return v.toString(16)
        })
      }

      // CONCATENATED MODULE: ./src/index.js

      external_commonjs_vue_commonjs2_vue_root_Vue_default().component(COMPONENT_NAME, Submenu)

      class Contextmenu {

        constructor(options) {
          const SubmenuConstructor = external_commonjs_vue_commonjs2_vue_root_Vue_default().component(COMPONENT_NAME)
          this.instance = new SubmenuConstructor()
          this.instance.items = options.items
          this.instance.position = {
            x: options.event && options.event.clientX || options.x || 0,
            y: options.event && options.event.clientY || options.y || 0,
            width: 0,
            height: 0
          }
          options.minWidth && (this.instance.style.minWidth = options.minWidth)
          options.zIndex && (this.instance.style.zIndex = options.zIndex)
          this.instance.customClass = options.customClass
          this.instance.$mount()
          document.body.appendChild(this.instance.$el)
          this.addListener()
        }

        mousewheelListener(e) {
          this.close()
        }

        mouseDownListener(e) {
          let el = e.target
          const menus = getElementsByClassName(CLASS_MENU)
          while (!menus.find(m => m === el) && el.parentElement) {
            el = el.parentElement
          }
          if (!menus.find(m => m === el)) {
            this.close()
          }
        }

        mouseClickListener(e) {
          let el = e.target
          const menus = getElementsByClassName(CLASS_MENU)
          const menuItems = getElementsByClassName(CLASS_MENU_ITEM)
          const unclickableMenuItems = getElementsByClassName(CLASS_MENU_ITEM_UNCLICKABLE)
          while (!menus.find(m => m === el) && !menuItems.find(m => m === el) && el.parentElement) {
            el = el.parentElement
          }
          if (menuItems.find(m => m === el)) {
            if (e.button !== 0 || unclickableMenuItems.find(m => m === el)) {
              return
            }
            this.close()
            return
          }
          if (!menus.find(m => m === el)) {
            this.close()
          }
        }

        addListener() {
          this.mouseClickListenerProxy = (e) => this.mouseClickListener(e)
          this.mouseDownListenerProxy = (e) => this.mouseDownListener(e)
          this.mousewheelListenerProxy = (e) => this.mousewheelListener(e)

          document.addEventListener('click', this.mouseClickListenerProxy)
          document.addEventListener('mousedown', this.mouseDownListenerProxy)
          document.addEventListener('mousewheel', this.mousewheelListenerProxy)
        }

        removeListener() {
          document.removeEventListener('click', this.mouseClickListenerProxy)
          document.removeEventListener('mousedown', this.mouseDownListenerProxy)
          document.removeEventListener('mousewheel', this.mousewheelListenerProxy)
        }

        close() {
          this.removeListener()
          this.instance.close()
        }
      }

      function install(Vue) {
        let last = null
        const ContextmenuProxy = function(options) {
          ContextmenuProxy.destroy()
          last = new Contextmenu(options)
        }
        ContextmenuProxy.destroy = function() {
          if (last) {
            last.close()
            last = null
          }
        }
        Vue.prototype.$contextmenu = ContextmenuProxy
      }

      if (window && window.Vue) {
        install(window.Vue)
      }

      /* harmony default export */
      const src_0 = ({
        install
      })

      // CONCATENATED MODULE: ./index.js

      /* harmony default export */
      const index = (src_0)
      // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js

      /* harmony default export */
      const entry_lib = (index)

    })()

    /******/
    return __webpack_exports__
    /******/
  })()
})
